Ideen i denne del er at lære at connecte til target samt cross compile
Del 1:
Der er forbindelse igennem VM ware
Del 2: Connection
Vi ønsker at oprette en secure forbindelse til Devkit 8000(target) dette gøres ved at benytte ssh. Oplysninger om dette er fundet på IHA side omkring devkit8000.
Ved hjælp af en af disse 2 kan vi oprette forbindelse til target og herefter har vi mulighed for at arbejde over på target.
Del 3: Moving files
Ved hjælp af secure copy kopiers en fil til target, vi ligger filen i mappen tmp. For at benytte seccure copy benyttes commandoen scp. For at få adgang til dette bruges sudo for at få tilladelse til at gøre dette.
vi kan se at filen er blevet overført da der bliver udskrevet abc 100%.
Del 4: Create shell script for ssh og scp
Connect (conn2tgt)
#!/bin/sh
ssh root@10.9.8.2
For cp2tgt skal der bruges mindst et argument. Efter dette undersøger vi om det er en mappe, hvis dette er opfyldt kopierer vi mappen, ellers ser vi om det er en ren fil og denne vil så blive kopieret.
#!/bin/sh
#
IP="10.9.8.2"
DIR=":~/files"
SCP="/usr/bin/scp"
USER="root@"
#
"Usage
# - se om argument
if [$# -ne 1]; then
echo "Usage: cp2tgt <file>"
exit
fi
if[ -d $1]; then
echo "Copy mappe"
$SCP -r $1 ${USER}$IP}$DIR
else
echo "Copy file"
$SCP $1 ${USER}${IP}$DIR
fi
Building C++ programs for target
Del 1: Cross compiling the program Hello World and running it on target
I denne del af opgaven ønsker vi at benytte hello_world filen fra tidligere og cross compile den til at køre på target, dette gøres ved brug af compileren
Del 2: Using makefiles to build host and target programs
Compiling til target ved makefile
Her bruges compileren "arm-angstrom-linux-gnueabi-g++" compileren til at compile til target, ellers er makefilen opbygge på samme måde som vi tidligere har gjort det.
ved at benytte commandoen make -f makefile.target fortæller vi at vi ønsker at bruge makefilen som skal compile til target, dette betyder at vi har mulighed for at have flere makefiles, så vi kan have en makefile for host og target og så blot vælge hvad filen skal bruges til.
Del 3: Cross compiling with more extended makefiles
Vi vil nu forsøge at cross compile flere filer med makefile, dette gøres ved at benytte samme makefile som i Øvelse 2, og så ændre compileren til at være compileren der compiler til target.
root@beagleboard:/tmp# ./target_parts1+2
this is part1!
this is part2!
root@beagleboard:/tmp#
Del4: Improving cross compilation handling in makefiles
Vi ser i del 3 at vi kan bruge makefile til at compile til target, vi ser at vi kan have to makefiles hvor den ene fungere til host og den anden til target. Problemet er blot at når vi bruger den ene makefile for f.eks. host og så bagefter køre makefilen for target så sletter vi filerne som i forvejen var lavet, dette er vi ikke interesseret i, så derfor vil vi gerne lave to makefiles(en for host, en for target) disse skal lægge deres filer i to forskellige mapper sådan at vi har en mappe for host og en for target.
For at få dette til at virke må vi ændre lidt i makefilerne. eks. for target:
først: OBJECTS = ${SOURCES:.cpp=.o}
Efter ændring: OBJECTS = target/${SOURCES:.cpp=.o}
Vi ser altså at der i filen skal foretages 3 ændringer, disse ændre er de samme for makefile til host. Ved hjælp af dette får vi fortalt at vi ønsker at objektet(arbjedsområde) placers i mappen tagret. Ligeledes placeres alle o filer i denne mappe. Når compilingen er kørt til ende vil execute filen være at finde i denne mappe.
Om makefilen skulle have været lavet til host skulle vi have haft en mappe der hed host f.eks. og så have ændret mappen fra target til host.
Når vi gør det på denne måde kan vi compile ud i forskellige mappe og på denne måde løser vi problemet med at filerne bliver slettet når vi compiler til de forskellige, ligeledes så kan vi køre en make clean uden at slette filerne for target og omvendt.
For egen forståelse er den fulde makefile for taget vidst nedenfor:
Mapperne target og host, dannes forinden ved commandoen mkdir:
For host er koden næsten den samme som for target, man benytter blot en anden compiler og der refereres til en anden mappe til placering af o + exe filer.
Del 5
For at få Eclipse til at compile for target (devkit8000) ændres compileren i settings for projektet
under proporties > settings må vi altså i commando linien indskrive den compiler vi vil benytte da vi skal compile til target, for c++ skal vi altså bruge
arm-angstrom.linux-gnuebi-g++
Ligeledes vælger vi Cross GCC for at lave en cross compiler.
Hvad har vi fået ud af denne øvelse:
Vi har lært at connect og kopierer filer til target(devKit8K). Dette gør det muligt at arbejde på target.
Vi har også lært at cross compile til target så man kan køre sine programmer på target. Dette er hele esensen i kurset; at benytte én
embedded device.
Vi har også lært at bruge eclipse til at compile vores projekts for os ved at tilføje commands til eclipse så den bruger den rigtige compiler. Dette er vigtigt da det gør det nemmere for os at compile.
Mange hjælpemidler kan findes under Devkit8000 på wikispaces.
Connecting to target:
Ideen i denne del er at lære at connecte til target samt cross compileDel 1:
Der er forbindelse igennem VM ware
Del 2: Connection
Vi ønsker at oprette en secure forbindelse til Devkit 8000(target) dette gøres ved at benytte ssh. Oplysninger om dette er fundet på IHA side omkring devkit8000.
Kan også gøres med følgende kommando
Ved hjælp af en af disse 2 kan vi oprette forbindelse til target og herefter har vi mulighed for at arbejde over på target.
Del 3: Moving files
Ved hjælp af secure copy kopiers en fil til target, vi ligger filen i mappen tmp. For at benytte seccure copy benyttes commandoen scp. For at få adgang til dette bruges sudo for at få tilladelse til at gøre dette.
vi kan se at filen er blevet overført da der bliver udskrevet abc 100%.
Del 4: Create shell script for ssh og scp
Connect (conn2tgt)
For cp2tgt skal der bruges mindst et argument. Efter dette undersøger vi om det er en mappe, hvis dette er opfyldt kopierer vi mappen, ellers ser vi om det er en ren fil og denne vil så blive kopieret.
#!/bin/sh # IP="10.9.8.2" DIR=":~/files" SCP="/usr/bin/scp" USER="root@" # "Usage # - se om argument if [$# -ne 1]; then echo "Usage: cp2tgt <file>" exit fi if[ -d $1]; then echo "Copy mappe" $SCP -r $1 ${USER}$IP}$DIR else echo "Copy file" $SCP $1 ${USER}${IP}$DIR fiBuilding C++ programs for target
Del 1: Cross compiling the program Hello World and running it on target
I denne del af opgaven ønsker vi at benytte hello_world filen fra tidligere og cross compile den til at køre på target, dette gøres ved brug af compileren
vi kan herefter teste om filen er compilet correct ved at benytte commandoen: file hello_tgt, kan vi se at filen er blevet compilet til target
ved at kopier filen til target som i del 1 kan vi køre filen på taget ved at benytte samme commandoer som på host.
Del 2: Using makefiles to build host and target programs
Compiling til target ved makefile
Her bruges compileren "arm-angstrom-linux-gnueabi-g++" compileren til at compile til target, ellers er makefilen opbygge på samme måde som vi tidligere har gjort det.
Hefter copiers filen til target og testes som tidligere
ved at benytte commandoen make -f makefile.target fortæller vi at vi ønsker at bruge makefilen som skal compile til target, dette betyder at vi har mulighed for at have flere makefiles, så vi kan have en makefile for host og target og så blot vælge hvad filen skal bruges til.
Del 3: Cross compiling with more extended makefiles
Vi vil nu forsøge at cross compile flere filer med makefile, dette gøres ved at benytte samme makefile som i Øvelse 2, og så ændre compileren til at være compileren der compiler til target.
Køre på target
Del4: Improving cross compilation handling in makefiles
Vi ser i del 3 at vi kan bruge makefile til at compile til target, vi ser at vi kan have to makefiles hvor den ene fungere til host og den anden til target. Problemet er blot at når vi bruger den ene makefile for f.eks. host og så bagefter køre makefilen for target så sletter vi filerne som i forvejen var lavet, dette er vi ikke interesseret i, så derfor vil vi gerne lave to makefiles(en for host, en for target) disse skal lægge deres filer i to forskellige mapper sådan at vi har en mappe for host og en for target.
For at få dette til at virke må vi ændre lidt i makefilerne. eks. for target:
først: OBJECTS = ${SOURCES:.cpp=.o} Efter ændring: OBJECTS = target/${SOURCES:.cpp=.o}Dette var første ændring, anden ændring:Sidste ændring der skal foretages:
Før: hello.o: hello.cpp ${CC} -c hello.cpp -o hello.o Efter: target/hello.o: hello.cpp ${CC} -c hello.cpp -o target/hello.oVi ser altså at der i filen skal foretages 3 ændringer, disse ændre er de samme for makefile til host. Ved hjælp af dette får vi fortalt at vi ønsker at objektet(arbjedsområde) placers i mappen tagret. Ligeledes placeres alle o filer i denne mappe. Når compilingen er kørt til ende vil execute filen være at finde i denne mappe.Om makefilen skulle have været lavet til host skulle vi have haft en mappe der hed host f.eks. og så have ændret mappen fra target til host.
Når vi gør det på denne måde kan vi compile ud i forskellige mappe og på denne måde løser vi problemet med at filerne bliver slettet når vi compiler til de forskellige, ligeledes så kan vi køre en make clean uden at slette filerne for target og omvendt.
For egen forståelse er den fulde makefile for taget vidst nedenfor:
Mapperne target og host, dannes forinden ved commandoen mkdir:
#Hello world makefile for target #Sources SOURCES = hello.cpp OBJECTS = target/${SOURCES:.cpp=.o} EXECUTABLE=target/hello_tgt #Compile CC=arm-angstrom-linux-gnueabi-g++ CFLAGS= -Wall -g #Tagets build: ${OBJECTS} ${CC} -o ${EXECUTABLE} ${OBJECTS} target/hello.o: hello.cpp ${CC} -c hello.cpp -o target/hello.o clean: @echo "Removing files..." rm -f ${EXECUTABLE} ${OBJECTS} help: @echo "Avaiable targets..." @echo "- help (watching now)" @echo "- build (to build the binary)" @echo "- clean (to cleanup everything)" @echo "Print, what in folder" @lsFor host er koden næsten den samme som for target, man benytter blot en anden compiler og der refereres til en anden mappe til placering af o + exe filer.
Del 5
For at få Eclipse til at compile for target (devkit8000) ændres compileren i settings for projektet
Ligeledes vælger vi Cross GCC for at lave en cross compiler.
Hvad har vi fået ud af denne øvelse:
Vi har lært at connect og kopierer filer til target(devKit8K). Dette gør det muligt at arbejde på target.
Vi har også lært at cross compile til target så man kan køre sine programmer på target. Dette er hele esensen i kurset; at benytte én
embedded device.
Vi har også lært at bruge eclipse til at compile vores projekts for os ved at tilføje commands til eclipse så den bruger den rigtige compiler. Dette er vigtigt da det gør det nemmere for os at compile.
Mange hjælpemidler kan findes under Devkit8000 på wikispaces.